package com.hjs.juc;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 一.线程池：提供一个线程队列，队列中保存着所有等待状态的线程，
 *    避免了创建和销毁线程的额外开销，提高了响应的速度
 * 二.
 *     java.util.concurrent.Executor: 负责线程的使用与调度的根接口
 *          -- ExecutorService 子接口:线程池的主要接口
 *             -- ThreadPoolExecutor :实现类
 *             -- ScheduledExecutorService 子接口：用于线程调度的接口
 *                -- ScheduledThreadPoolExecutor 实现类：继承了ThreadPoolExecutor，实现了ScheduledExecutorService
 * 三.工具类Executors
 *      ExecutorServie newFixedThreadPool() :创建固定大小的线程池
 *      ExecutorServie newCachedThreadPool() :创建缓存线程池，数量不固定，可自动更改数量
 *      ExecutorServie newSingleThreadExecutor() :创建单个线程池
 *
 *      ScheduledExecutorService newScheduledThreadPool() :创建固定大小的线程池，可以延迟或者定时的执行任务
 *
 *      ExecutorServie newFixedThreadPool() :创建固定大小的线程池
 *      ExecutorServie newFixedThreadPool() :创建固定大小的线程池
 *
 *
 *
 * @author hanjinsong
 * @date 2020-02-20 9:59
 */
public class TestThreadPool {

    public static void main(String[] args) {

        ExecutorService pool = Executors.newFixedThreadPool(5);

        ThreadPoolDemo threadPoolDemo = new ThreadPoolDemo();
        //分配任务
        for (int i = 0; i < 10; i++) {
            pool.submit(threadPoolDemo);
        }


        //关闭线程池
        pool.shutdown();

    }

}
class ThreadPoolDemo implements Callable {

    @Override
    public Object call() throws Exception {
        int i=0;
        System.out.println(Thread.currentThread().getName() + " : "+i++);
        return null;
    }

}
